home *** CD-ROM | disk | FTP | other *** search
/ Trusted Irix /B 4.0.4 / Trusted-Irix B-4.0.1.iso / dist / eoe1.idb / usr / include / sys / cdsioreg.h.z / cdsioreg.h
C/C++ Source or Header  |  1992-04-03  |  9KB  |  229 lines

  1. /*
  2.  * Definitions for the Central Data 3608 8 port serial i/o interface
  3.  *
  4.  * Copyright 1989 Silicon Graphics, Inc.  All rights reserved.
  5.  *
  6.  * $Revision: 3.12 $
  7.  */
  8.  
  9.  
  10. #ifdef    _KERNEL
  11.  
  12. #define OUTBUF_LEN 3056
  13. #define INBUF_LEN 1024            /* assumed to be a power of 2 */
  14. /*
  15.  * Layout of the dual port ram
  16.  */
  17. struct    device {
  18.     unchar    outputBuf0[OUTBUF_LEN];    /* 0000-0BEF: output buffer 0 */
  19.     unchar    outputBuf1[OUTBUF_LEN];    /* 0BF0-17DF: output buffer 1 */
  20.     unchar    inputBuf[INBUF_LEN];    /* 17E0-1BDF: input buffer */
  21.     unchar    errorBuf[INBUF_LEN];    /* 1BE0-1FDF: error buffer */
  22.     unchar    pad0;            /* 1FE0: not used */
  23.     unchar    cmd;            /* 1FE1: command code */
  24.     unchar    cmdHigh;        /* 1FE2: command data, high byte */
  25.     unchar    cmdLow;            /* 1FE3: command data, low byte */
  26.     unchar    pad1;            /* 1FE4: not used */
  27.     unchar    cmdStatus;        /* 1FE5: command status */
  28.     unchar    pad2;            /* 1FE6: not used */
  29.     unchar    uartStatus;        /* 1FE7: status from uart */
  30.     ushort    inputFillPtr;        /* 1FE8-1FE9: input filling pointer */
  31.     ushort    inputEmptyPtr;        /* 1FEA-1FEB: input emptying ptr */
  32.     ushort    inputOverflows;        /* 1FEC-1FED: input buf overflows */
  33.     unchar    pad3;            /* 1FEE: not used */
  34.     unchar    intSourceFlag;        /* 1FEF: interrupt source flag */
  35.     unchar    pad4;            /* 1FF0: not used */
  36.     unchar    outputBusy;        /* 1FF1: output busy flag */
  37.     unchar    pad5;            /* 1FF2: not used */
  38.     unchar    outputStopped;        /* 1FF3: output stopped */
  39.     unchar    pad6;            /* 1FF4: not used */
  40.     unchar    parityError;        /* 1FF5: parity error */
  41.     unchar    pad7;            /* 1FF6: not used */
  42.     unchar    portIntStatusFlag;    /* 1FF7: port interrupt status flag */
  43.     unchar    pad8[6];        /* 1FF8-1FFD: not used */
  44.     ushort    firmwareRev;        /* 1FFE-1FFF: firmware revision */
  45. };
  46.  
  47. /*
  48.  * On the CD3608 board the command port and hostStatusPort overlay the
  49.  * memory space for port 7.
  50.  */
  51. struct    iodevice {
  52.     char    padports[8192*7];    /* ports 0-6 */
  53.     char    pad[0x1FFC];        /* E000-FFFB: buffer for port 7 */
  54.     unchar    pad0;            /* FFFC: not used */
  55.     unchar    hostStatusPort;        /* FFFD: status port */
  56.     unchar    pad1;            /* FFFE: not used */
  57.     unchar    cmdPort;        /* FFFF: command port */
  58. };
  59.  
  60.  
  61. /* bits in the uartStatus.
  62.  *    The boards do not like to talk when DCD is low, so we use DSR
  63.  *    instead.  Another problem is that we have shipped some large number
  64.  *    of IP4/3608 systems with cables which do not shuffle the wires.
  65.  */
  66. #define    DCD_BIT        (cdnewcable ? SCC_DSR : SCC_DCD)
  67.  
  68. /* bits in the errorBuf */
  69. #define    ERRB_FRAMING    0x40        /* framing error */
  70. #define    ERRB_OVERRUN    0x20        /* overrun error */
  71. #define    ERRB_PARITY    0x10        /* parity error */
  72. #define    ERRB_BREAK    0x01        /* BREAK input */
  73.  
  74. /* bits in the uartStatus */
  75. #define    SCC_DCD        0x04        /* DCD active */
  76. #define    SCC_DSR        0x08        /* DSR active */
  77.  
  78.  
  79. /* bits in intSourceFlag */
  80. #define    ISF_PARITY    0x08        /* parity error interrupt */
  81. #define    ISF_STATUS    0x04        /* status change interrupt */
  82. #define    ISF_INPUT    0x02        /* input interrupt */
  83. #define    ISF_OUTPUT    0x01        /* output done interrupt */
  84.  
  85. /* bits in hostStatusPort */
  86. #define    HSP_INT        0x08        /* this board interrupted */
  87. #define    HSP_READY    0x01        /* board is ready for a command */
  88.  
  89. /* cmd's */
  90. #define    CMD_SET_SCC    0x00        /* set scc register */
  91. #define    CMD_SET_BAUD    0x01        /* set baud rate registers */
  92. #define    CMD_SET_XONMASK    0x02        /* set xon/xoff mask/enables */
  93. #define    CMD_SET_XONCHAR    0x03        /* set xon/xoff characters */
  94. #define    CMD_SEND_0    0x04        /* send block 0 */
  95. #define    CMD_SEND_1    0x05        /* send block 1 */
  96. #define    CMD_SEND_NOW    0x06        /* send immediate character */
  97. #define    CMD_SEND_BREAK    0x07        /* send break */
  98. #define    CMD_SET_IDT    0x08        /* set input delay time */
  99. #define    CMD_SET_HWM    0x09        /* set high water mark */
  100. #define    CMD_SET_III    0x0A        /* set immediate input interrupt */
  101. #define    CMD_SET_ISB0    0x0B        /* set interrupt on status bits 0 */
  102. #define    CMD_SET_ISB1    0x0C        /* set interrupt on status bits 1 */
  103. #define    CMD_SET_INPUT    0x0D        /* set input interrupt */
  104. #define    CMD_SET_OUTPUT    0x0E        /* set output interrupt */
  105. #define    CMD_SET_STATUS    0x0F        /* set status interrupt */
  106. #define    CMD_SET_PARITY    0x10        /* set parity interrupt */
  107. #define CMD_NUM        (CMD_SET_PARITY+1)
  108.  
  109. /* high bits in ipl for CMD_SET_{INPUT/OUTPUT/STATUS/PARITY} */
  110. #define    INT_ENABLE    0x08        /* enable interrupts */
  111. #define    INT_ROAK    0x80        /* reset on ack */
  112.  
  113. /*
  114.  * CD3608 uart registers
  115.  */
  116.  
  117. /* bits in SCC write register 3 (used by CMD_SET_SCC) */
  118. #define    WR3_BPC_5    0x00        /* 5 bits per character */
  119. #define    WR3_BPC_7    0x40        /* 7 bits per character */
  120. #define    WR3_BPC_6    0x80        /* 6 bits per character */
  121. #define    WR3_BPC_8    0xC0        /* 8 bits per character */
  122. #define    WR3_DCD        0x20        /* DCD & CTS control enable */
  123. #define    WR3_RCV        0x01        /* receiver enabled */
  124.  
  125. /* bits in SCC write register 4 (used by CMD_SET_SCC) */
  126. #define    WR4_CLK_1    0x00        /* clock rate x1 */
  127. #define    WR4_CLK_16    0x40        /* clock rate x16 */
  128. #define    WR4_CLK_32    0x80        /* clock rate x32 */
  129. #define    WR4_CLK_64    0xC0        /* clock rate x64 */
  130. #define    WR4_STOP_NONE    0x00        /* 0 stop bits */
  131. #define    WR4_STOP_1    0x04        /* 1 stop bits */
  132. #define    WR4_STOP_15    0x08        /* 1.5 stop bits */
  133. #define    WR4_STOP_2    0x0C        /* 2 stop bits */
  134. #define    WR4_EVEN    0x02        /* even parity */
  135. #define    WR4_PARITY    0x01        /* enable parity */
  136.  
  137. /* bits in SCC write register 5 (used by CMD_SET_SCC) */
  138. #define    WR5_DTR        0x80        /* DTR active */
  139. #define    WR5_BPC_5    0x00        /* 5 bits per character */
  140. #define    WR5_BPC_7    0x20        /* 7 bits per character */
  141. #define    WR5_BPC_6    0x40        /* 6 bits per character */
  142. #define    WR5_BPC_8    0x60        /* 8 bits per character */
  143. #define    WR5_BIT3    0x08        /* bit 3 (must be one) */
  144. #define    WR5_RTS        0x02        /* RTS enable */
  145.  
  146. /* bits in SCC write register 14 (used by CMD_SET_SCC) */
  147. #define    WR14_LOOP    0x10        /* enable local loopback */
  148. #define    WR14_ECHO    0x08        /* auto echo enable */
  149. #define    WR14_DTRCTL    0x04        /* dtr control */
  150. #define    WR14_CONST    0x03        /* must be ones */
  151.  
  152.  
  153. #endif    /* _KERNEL */
  154.  
  155. /*
  156.  * This structure is used to manage the software state of each
  157.  * serial port.
  158.  */
  159. typedef struct cdport {
  160.     ushort    cd_framingErrors;    /* # of framing errors */
  161.     ushort    cd_overruns;        /* # of overrun errors */
  162.     ushort    cd_overflows;        /* # of overflows */
  163.     ushort    cd_allocb_fail;        /* losses due to allocb() failures */
  164.  
  165.     volatile struct device *cd_device;  /* port device address */
  166.     volatile struct iodevice *cd_iodevice;    /* pointer to i/o port */
  167.  
  168.     struct    termio cd_termio;
  169. #define cd_iflag cd_termio.c_iflag
  170. #define cd_cflag cd_termio.c_cflag
  171. #define cd_lflag cd_termio.c_lflag
  172. #define cd_line cd_termio.c_line    /* 'line discipline' */
  173. #define cd_cc cd_termio.c_cc
  174.  
  175.     ushort    cd_oldcflag;        /* previous mode bits */
  176.     unchar    cd_mask0, cd_mask1;
  177.     unchar    cd_rts_dtr;
  178.  
  179.     unchar    cd_bit;            /* 1 << board port number */
  180.     int    cd_minor;        /* minor device number */
  181.     int    cd_xmitlimit;        /* output burst size */
  182.     int    cd_xmit;        /* bytes waiting to be sent */
  183.  
  184.     ulong    cd_late_lbolt;        /* it started being late then */
  185.     ulong    cd_state;        /* current state */
  186.  
  187.     queue_t    *cd_rq, *cd_wq;        /* our queues */
  188.     mblk_t    *cd_rmsg, *cd_rmsge;    /* current input message */
  189.     int    cd_rmsg_len;
  190.     int    cd_rbsize;        /* recent message length */
  191.     mblk_t    *cd_rbp;        /* current input buffer */
  192.  
  193.     int    cd_tid;            /* (recent) output delay timer ID */
  194. } CDPORT;
  195.  
  196. /* bits in cd_state */
  197. #define CD_ISOPEN         0x1    /* device is open */
  198. #define CD_WOPEN         0x2    /* waiting for carrier */
  199. #define CD_DCD             0x4    /* we have carrier */
  200. #define CD_TIMEOUT         0x8    /* delaying */
  201. #define CD_BREAK        0x10    /* breaking */
  202. #define CD_TIMERS    (CD_TIMEOUT|CD_BREAK)
  203. #define CD_LATER        0x20    /* retry-timer active */
  204. #define CD_RETRY_ACK        0x40    /* delayed interrupt ACK */
  205. #define CD_RETRY        0x80    /* waiting for the device */
  206. #define CD_NEW_RETRY       0x100    /* recently started waiting */
  207. #define CD_OUTBUSY       0x200    /* expecting output interrupt */
  208. #define    CD_BUSY        (CD_TIMERS|CD_OUTBUSY)
  209. #define CD_TXSTOP       0x400    /* output stopped by received XOFF */
  210. #define CD_LIT           0x800    /* have seen literal character */
  211. #define CD_BLOCK      0x1000    /* XOFF sent because input full */
  212. #define CD_TX_TXON      0x2000    /* need to send XON */
  213. #define CD_TX_TXOFF      0x4000    /* need to send XOFF */
  214. #define CD_RTS          0x8000    /* set RTS=1 */
  215. #define CD_FLOW         0x10000    /* do hardware flow control */
  216. #define CD_OFF_INT     0x20000    /* expect DCD-off interrupt */
  217. #define CD_ON_INT     0x40000    /* expect DCD-on interrupt */
  218. #define CD_MODEM     0x80000     /* modem device */
  219.  
  220. #define CD_REPRO_MASK    0xf00000    /* steps in reprograming */
  221. #define CD_REPRO_INC    0x100000
  222. #define CD_REPRO_STEP(cdp) ((cdp)->cd_state & CD_REPRO_MASK)
  223. #define CD_REPRO_ADV(cdp) ((cdp)->cd_state += CD_REPRO_INC)
  224. #define CD_REPRO(n)    ((n)*CD_REPRO_INC)
  225.  
  226.  
  227. #define CDUPC_LN 3
  228. #define    CDUPC    (1<<CDUPC_LN)        /* 8 units per controller */
  229.